package com.ymm.lulutong.domain;


import com.ymm.lulutong.entity.Shipper;
import com.ymm.lulutong.utils.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author guorui
 */
public interface ShipperProfileDomainService {

    /**
     * 货主注册新用户
     *
     * @param phone            货主注册手机号
     * @param password         密码
     * @param passwordValidate 确认密码
     * @param shipperNickname  货主昵称
     * @return 注册后的Shipper对象，若注册失败则为null
     */
    Result<Shipper> register(String phone, String password, String passwordValidate, String shipperNickname);

    /**
     * 货主登录
     *
     * @param phone    货主账号的手机号
     * @param password 密码
     * @return Shipper对象，若登录失败则为null
     */
    Result<Shipper> login(String phone, String password);

    /**
     * 更新密码
     *
     * @param shipperId           货主id
     * @param newPassword         货主新的密码
     * @param newPasswordValidate 确认密码
     * @return 更新后的Shipper
     */
    Result<Shipper> updatePassword(Long shipperId, String newPassword, String newPasswordValidate);

    /**
     *
     * @param phoneNumber 手机号
     * @param newPassword 新的密码
     * @param newPasswordValidate 新的密码确认
     * @return 修改密码后的shipper
     */
    Result<Shipper> retrievePassword(String phoneNumber, String newPassword, String newPasswordValidate);

    /**
     * 更新手机号
     *
     * @param shipperId 货主id
     * @param newPhone  货主新的手机号
     * @return 更新后的Shipper
     */
    Result<Shipper> updatePhoneNumber(Long shipperId, String newPhone);

    /**
     * 更新头像
     *
     * @param shipperId 货主Id
     * @param image 头像图片
     * @return 货主实体
     */
    Result<Shipper> updateProfilePicture(Long shipperId, MultipartFile image);


    /**
     * 获取货主信息
     */
    Result<Shipper> getShipperByShipperId(Long shipperId);

    /**
     * 分页返回货主集合
     */
    Result<List<Shipper>> listShippersByPage(int pageNum, int pageSize);

    /**
     * 分页获取符合条件的货主集合
     */
    Result<List<Shipper>> listShippersOnConditionByPage(int pageNum, int pageSize, Shipper condition);

    /**
     * 根据提供的ids返回Shipper集合
     */
    Result<List<Shipper>> listShippersByShipperIds(List<Long> shipperIds);
}
